Jackson এর Streaming API এমন একটি কার্যকর টুল, যা পড়ার (parsing) এবং লেখার (generation) কাজগুলো সরাসরি JSON ডেটার উপর করে। এটি মূলত নিম্ন-লেভেল API, যেখানে আপনি JSON ডেটার উপর আরও বেশি নিয়ন্ত্রণ পান এবং এটি উচ্চ-লেভেল Data Binding বা Tree Model API থেকে আরও দ্রুত কাজ করে। এটি বিশেষভাবে কার্যকর, যখন আপনি খুব বড় JSON ফাইল নিয়ে কাজ করছেন এবং মেমোরি দক্ষতার প্রয়োজন।
Streaming API-এর মূল উপাদানসমূহ
- JsonParser:
- JSON ডেটা পড়ার জন্য ব্যবহার হয়।
- এটি একটি "pull-based" API, যেখানে ডেটা একবারে একটি করে টোকেন হিসেবে প্রসেস হয়।
- JsonGenerator:
- JSON ডেটা লেখার জন্য ব্যবহার হয়।
- এটি একটি "push-based" API, যেখানে ডেটা ম্যানুয়ালি JSON আউটপুটে লেখা হয়।
JsonParser দিয়ে JSON পড়ার উদাহরণ
কোড:
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;
import java.io.File;
import java.io.IOException;
public class StreamingReadExample {
public static void main(String[] args) {
try {
// JSON ফাইল বা স্ট্রিম থেকে JsonParser তৈরি
JsonFactory factory = new JsonFactory();
JsonParser parser = factory.createParser(new File("data.json"));
// JSON ফাইল পঠনের লজিক
while (!parser.isClosed()) {
JsonToken token = parser.nextToken(); // পরবর্তী টোকেন পড়ুন
if (token == null) {
break;
}
// ফিল্ডের নাম চেক করুন
if (JsonToken.FIELD_NAME.equals(token)) {
String fieldName = parser.getCurrentName();
System.out.println("Field Name: " + fieldName);
// ফিল্ডের ভ্যালু পড়ুন
token = parser.nextToken();
if (JsonToken.VALUE_STRING.equals(token)) {
System.out.println("Value: " + parser.getValueAsString());
} else if (JsonToken.VALUE_NUMBER_INT.equals(token)) {
System.out.println("Value: " + parser.getValueAsInt());
}
}
}
parser.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
উদাহরণ data.json ফাইল:
{
"id": 1,
"name": "Rahim",
"age": 25
}
আউটপুট:
Field Name: id
Value: 1
Field Name: name
Value: Rahim
Field Name: age
Value: 25
JsonGenerator দিয়ে JSON লেখার উদাহরণ
কোড:
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonGenerator;
import java.io.File;
import java.io.IOException;
public class StreamingWriteExample {
public static void main(String[] args) {
try {
// JsonGenerator তৈরি
JsonFactory factory = new JsonFactory();
JsonGenerator generator = factory.createGenerator(new File("output.json"), JsonGenerator.Feature.AUTO_CLOSE_TARGET);
// JSON লেখার লজিক
generator.writeStartObject(); // Start JSON Object
generator.writeNumberField("id", 1); // একটি নাম্বার ফিল্ড লিখুন
generator.writeStringField("name", "Rahim"); // একটি স্ট্রিং ফিল্ড লিখুন
generator.writeNumberField("age", 25); // একটি নাম্বার ফিল্ড লিখুন
generator.writeEndObject(); // End JSON Object
generator.close(); // JsonGenerator বন্ধ করুন
} catch (IOException e) {
e.printStackTrace();
}
}
}
আউটপুট ফাইল (output.json):
{
"id": 1,
"name": "Rahim",
"age": 25
}
Streaming API-এর সুবিধা
- মেমোরি দক্ষতা:
- পুরো JSON ডেটা একবারে মেমোরিতে লোড না করে, টুকরো টুকরো ডেটা প্রসেস করা হয়।
- বিশেষভাবে উপযোগী যখন JSON ডেটা খুব বড় হয়।
- দ্রুততা:
- Data Binding বা Tree Model API থেকে দ্রুততর কারণ এটি সরাসরি JSON টোকেনের সাথে কাজ করে।
- লাইটওয়েট প্রসেসিং:
- আপনি শুধুমাত্র প্রয়োজনীয় ডেটা প্রসেস করতে পারবেন এবং অপ্রয়োজনীয় অংশ এড়িয়ে যেতে পারবেন।
Streaming API বনাম Data Binding API
| বৈশিষ্ট্য | Streaming API | Data Binding API |
|---|---|---|
| ডেটা প্রসেসিং | নিম্ন-লেভেল টোকেন ভিত্তিক | উচ্চ-লেভেল Object ভিত্তিক |
| মেমোরি ব্যবহারে দক্ষতা | খুব বেশি | তুলনামূলক কম |
| পাঠযোগ্যতা | জটিল | সহজ |
| পারফরম্যান্স | খুব দ্রুত | তুলনামূলক কম |
Jackson-এর Streaming API বিশেষত বড় JSON ডেটা বা স্ট্রিমড ডেটা প্রসেস করার জন্য আদর্শ। তবে, যদি আপনি সহজ এবং দ্রুত ডেভেলপমেন্ট চান, তবে Data Binding API বেশি কার্যকর হতে পারে।
Content added By
Read more